AWS Support Automation Workflows (AWS SAW) を利用した、旧世代 (Xen) から最新世代 (AWS Nitro System) への移行タスクの自動化をやってみた【Linux 編】

AWS Support Automation Workflows (AWS SAW) を利用した、旧世代 (Xen) から最新世代 (AWS Nitro System) への移行タスクの自動化をやってみた【Linux 編】

Clock Icon2024.03.04

はじめに

テクニカルサポートの 片方 です。
AWS Systems Manager のセルフサービス自動化ランブックである AWS Support Automation Workflows (SAW) を利用した、旧世代(Xen)から最新世代 (AWS Nitro System) への移行タスクの自動化【Linux】をやってみました。

AWS サポート自動化ワークフローは、厳選された AWS Systems Manager セルフサービス自動化ランブックのコレクションです。これらのランブックは、お客様の問題を解決して得たベストプラクティスを基に、AWS サポートエンジニアリングによって作成されています。これにより、AWS リソースに関する一般的な問題のトラブルシューティング、診断、修正が可能になります。

AWS Nitro System への移行について

AWS Nitro System で動作するインスタンスタイプの利⽤条件としては、旧世代(Xen)から最新世代 (AWS Nitro System) への移⾏は様々な要件が存在します。

  • /etc/fstab にブロックバイス名に依存した設定を含めない (UUID 等を利⽤)
  • NVMe モジュールがインストールされ、Linux 初期 RAM ディスクに含まれる
  • ENA モジュールがインストールされ、かつ拡張ネットワーキングが有効 etc..

もし、条件を満たさない場合は次のような事象が発⽣します。

  • インスタンスタイプの変更に失敗
  • インスタンスタイプの変更後、EC2 インスタンスの起動に失敗 (EC2 インスタンスがネットワーク接続性を失し、接続不能に陥る)

このような状況において、AWS Support Automation Workflows (SAW) を活⽤することで以下のようなタスクを⾃動化することが可能であり、簡単かつ安全に最新世代のインスタンスタイプに変更可能です。

AWSSupport-CheckXenToNitroMigrationRequirements を利用の場合は、EC2 インスタンスが AWS Nitro System の前提条件を満たすか否かの事前確認と、満たさない場合はその修正⽅法や参考情報を提⽰します。 確認のみ⾏い、変更操作は実施しない 点と 利⽤できるディストリビューションとバージョンに制限がある 点にもご留意ください。

本ランブックがチェックする「EC2 インスタンスの設定の観点」は以下です。

  • EC2 インスタンスのルートボリュームが Amazon Elastic Block Store (Amazon EBS) ボリュームである
  • EC2 インスタンスの ENA 属性 (enaSupport 属性) が有効である

「EC2 インスタンス内部の観点」としては以下です。

  • ENA モジュールがインストール済である
  • NVMe モジュールがインストール済であり、かつ初期 RAM ディスクに含まれる
  • /etc/fstab にブロックデバイス名に依存した設定が含まれない
  • 予測可能なインタフェース名を⽤いていない


AWSSupport-MigrateXenToNitroLinux を利用の場合は、 AWS Nitro System の要件の確認に加えて可能であれば実際の移⾏を実施したい場合や、移⾏に必要な変換処理を⾃動化したい場合が想定されます。留意点としては、対象インスタンスはインターネット接続性を有する サブネットに所属する必要があり利⽤できるディストリビューションとバージョンに制限 がございます。
また、本ランブックでは移⾏⽅式合わせて 2 つの動作タイプが存在します。

  • Clone&Migrate タイプ
    対象の EC2 インスタンスを複製し、AWS Nitro System 上で動作するインスタンスタイプで起動します。

  • FullMigration タイプ
    対象の EC2 インスタンスを AWS Nitro System 上で動作するインスタンスタイプに変更します

やってみた

以下の AWS Black Belt Online Seminar 記載内容を元にやってみました。なお、AWS Support Automation Workflows (SAW) を利用する際に対象 EC2 インスタンスをマネージドノードにします。 本ブログでは AWS Systems Manager のマネージドノードにする方法は割愛させて頂きます。

AWSSupport-CheckXenToNitroMigrationRequirements

対象のドキュメントを検索 [AWSSupport-CheckXenToNitroMigrationRequirements]

「オートメーションを実⾏する」を選択

「Simple execution」を選択

下部へスクロールして、対象 インスタンスを選択。※ 今回は Xen で起動している t2.medium を選択

AutomationAssumeRole の設定は、未設定の場合ランブックを実⾏した IAM ユーザの権限を利⽤します。ロールを使用する場合は、AWSSupport-CheckXenToNitroMigrationRequirements を参考に必要な権限がアタッチしているロールを作成して使用してください。

更に下部へスクロールして「Execute(実行)」をクリック

以下の画面が出力されれば成功です。

Outputs (出力結果)

 1. Checking if the root volume is EBS: 
[PASSED] Root Volume attached with the instance is an EBS device.
 
 2. Determining if ENA Attribute is enabled:
[PASSED] Enhanced networking (ENA) attribute  is ENABLED on the EC2 Instance
 
 3. Checking ENA drivers status on the instance:
[PASSED] ENA Module with version 2.11.1g is installed and available on your EC2 instance

 
 4. Checking NVME drivers status on the instance:
[PASSED] NVMe Module is installed and loaded in kernel on your EC2 instance

 
 5. Checking FSTAB for entries with devices names:
[PASSED] FSTAB file looks fine and does not contain any entry with device names and are with UUID

 
 6. Determine if OS uses predictable network interface names by default:
[FAILED] The option net.ifnames=0 is not present on the /etc/default/grub file. It is recommended to add this kernel parameter to disable predictable interface naming. 

 For more information about these checks, refer to AWS Premium Support Knowledge Center Article
https://aws.amazon.com/premiumsupport/knowledge-center/boot-error-linux-nitro-instance/

各々の検査項⽬とその結果が表⽰され、問題なく通過した検査項⽬は "[PASSED]" と表記。問題を検出した検査項⽬は "[FAILED]" と表記され、修正と関連するドキュメントや情報を表⽰されます。 文末には AWS re:Post へのリンクがあり対処法について紹介しています。

AWSSupport-MigrateXenToNitroLinux

本ランブックは 4 つのフェーズから構成されています。

対象のドキュメントを検索 [AWSSupport-MigrateXenToNitroLinux]

「オートメーションを実⾏する」を選択

「Simple execution」を選択

各パラメーターを⼊⼒。パラメーターについては以下をご参考ください。

  • TargetInstanceId [必須]
    対象とする EC2 インスタンスのインスタンス ID

  • NitroInstanceType [必須]
    移⾏先のインスタンスタイプ(AWS Nitro System 上で動作するインスタンスタイプを指定)

  • OperationType [必須]
    実⾏タイプを指定 (Clone&Migrate or FullMigration)

  • SNSTopicArn [必須]
    承認の要求を通知するための Amazon SNS トピックの ARN

  • ApproverIAM [必須]
    承認が可能な IAM ユーザ名、IAM ユーザ ARN、IAM ロール ARN、IAM ロール継承 ARN

  • MinimumRequiredApprovals [任意]
    承認が要求されたときに必要な最⼩承認数

  • AutomationAssumeRole [任意]
    SSM Automation が各種 API を呼び出す際に利⽤するロール名、未設定の場合、ランブックを利⽤した IAM ユーザの権限を利⽤

  • DeleteResourcesOnFailure [必須]
    移⾏が何らかの理由によって失敗した場合に途中作成した EC2インスタンスや AMI を削除せずに維持するか否か

  • Acknowledgement [必須]
    ランブックの動作を理解し、⼿順に同意する場合は、"Yes, I understand and acknowledge"と⼊⼒

今回は OperationType を Clone&Migrate で選択し、以下の設定を行いました。

設定に問題なければ下部へスクロールして「Execute(実行)」をクリック

暫くすると、承認の要求を通知するために記載した Amazon SNS トピック ARN 宛てに以下のメールが届きます。こちらは、数回に渡って Amazon SNS 経由で承認が求められます。

※ 抜粋とマスクしてます
Test EC2 instance launched from the target EC2 instance successfully passed the 2/2 status checks. Provide approval to stop the target EC2 instance i-0156f5a3a4cf5a791 in order to proceed with the automation. If approved, target EC2 instance will be stopped. Before providing approval, make sure 1) Elastic IP address is assigned to the EC2 instance, if not Public IP will be changed, once the instance is stopped. This step will automatically timeout after 3600s if no action is taken.
-- Approval Details --
Approval Step Name: approvalToStopTargetInstance
Region: ap-northeast-1
Automation Execution Id: c0d5090b-a013-aaaa-bbbb-cccccccccc
Approval Expires At: 2024-03-04 08:15 AM UTC
-- Approve or reject through AWS Console --
Approve:  https://ap-northeast-1.console.aws.amazon.com/systems-manager/automation/execution/c0d5090b-a013-4337-aaaa-123456789012/approval?region=ap-northeast-1#signalType=Approve
Reject:   https://ap-northeast-1.console.aws.amazon.com/systems-manager/automation/execution/c0d5090b-a013-4337-bbbb-987654321098/approval?region=ap-northeast-1#signalType=Reject

問題なければ、承認。

最終的に対象インスタンスは停⽌され AWS Nitro System 上で複製インスタンスが起動します。

検証環境でも、以下のように対象インスタンスは停⽌され AWS Nitro System 上で複製インスタンスが起動していることを確認しました。

なお、OperationType で FullMigration を選択した場合は、以下の挙動になります。

まとめ

非常に簡単かつ安全に AWS Nitro System へ移行することができました。本ブログが手順書作成など誰かの参考となれば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.